/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.test subversion
 */
package br.com.eurotrader.controller;

import br.com.eurotrader.consulta.ConsultaSimplesBean;
import br.com.eurotrader.consulta.Criterio;
import br.com.eurotrader.dao.BaseDao;
import br.com.eurotrader.interfaces.InterfaceEntidades;
import br.com.eurotrader.utils.FacesUtils;
import br.com.eurotrader.utils.MetodosBotoes;
import br.com.eurotrader.navegacao.NavegarPorPaginas;
import br.com.eurotrader.push.CentralPush;
import com.icesoft.faces.component.ext.HtmlDataTable;
import com.icesoft.faces.component.ext.HtmlInputSecret;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlInputTextarea;
import com.icesoft.faces.component.ext.HtmlPanelGrid;
import com.icesoft.faces.component.ext.HtmlPanelGroup;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.ext.RowSelectorEvent;
import com.icesoft.faces.component.paneltabset.PanelTabSet;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.Local;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.component.UISelectBoolean;
import javax.faces.component.UISelectMany;
import javax.faces.component.UISelectOne;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.DateTimeConverter;
import javax.faces.convert.NumberConverter;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.ArrayDataModel;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import javax.inject.Inject;

/**
 *
 * @author PROG01
 */
public class BaseController<T, ID> implements Serializable {

    private BaseDao<T, ID> objetoDao;

    public BaseDao<T, ID> getObjetoDao() {
        return objetoDao;
    }
    private T objeto;

    public T getObjeto() {
        return objeto;
    }

    public BaseController() {
        //     SessionRenderer.addCurrentSession(grupo);
//        state = PersistentFacesState.getInstance();
        //  state = PersistentFacesState.getInstance();
    }

    public void setColunasTabela(String coluna, String relacao) {
        listaDeColunas.add(coluna);
        relacoes.put(coluna, relacao);
    }
    private List<String> listaDeColunas = new ArrayList<String>();
    private HashMap relacoes = new HashMap();

    public HashMap getRelacoes() {
        return relacoes;
    }

    public void setRelacoes(HashMap relacoes) {
        this.relacoes = relacoes;
    }

    // private PersistentFacesState state = null;
    //  private String grupo = "group";
    public List getListaDeColunas() {
        return listaDeColunas;
//        Set set = relacoes.entrySet();
//        Iterator i = set.iterator();
//        while (i.hasNext()) {
//            Map.Entry me = (Map.Entry) i.next();
//            listaDeColunas.add((String) me.getKey());
//            System.out.println("coluna: " + (String) me.getKey());
//        }
//        System.out.println("-----------------------------------------------------------------------------------");
//        return listaDeColunas;
//        Method[] metodos = objeto.getClass().getMethods();
//        for (int i = 0; i < metodos.length; i++) {
//            //System.out.println("aqui ");
//            if ((metodos[i].getName().contains("get")) && (!metodos[i].getName().substring(metodos[i].getName().length() - 1, metodos[i].getName().length()).equals("9")) && (!(metodos[i].getName().equals("getClass")))
//                    && (!metodos[i].getName().contains("Collection")) && (!metodos[i].getName().equals("getId"))) {
//                listaDeColunas.add(metodos[i].getName().substring(metodos[i].getName().indexOf("t") + 1, metodos[i].getName().length()).replace("_", " "));
//            }
//        }
//        Field[] declaredFields = objeto.getClass().getDeclaredFields();
//        List<String> listaDeColunaOrdenada = new ArrayList<String>();
//        for (Field field : declaredFields) {
//            for (String coluna : listaDeColunas) {
//            //    System.out.println("coluna " + coluna.toLowerCase().trim());
//              //  System.out.println("entidade " + field.getName().toLowerCase().trim().replace("9", ""));
//                if (field.getName().toLowerCase().trim().replace("9", "").equals(coluna.replace(" ", "_").toLowerCase().trim())) {
//                    listaDeColunaOrdenada.add(coluna);
//                    break;
//                }
//            }
//        }
        // System.out.println("lista : " + listaDeColunas);
//        return listaDeColunaOrdenada;
    }

    public void setObjeto(T objeto) {
        this.objeto = objeto;
    }

    public void setObjetoDao(BaseDao<T, ID> objetoDao) {
        this.objetoDao = objetoDao;
    }

    public void atualizar(ActionEvent event) {
//        if (metodoValidarCampos(event)) {
        try {
            if (validacoes(event)) {
                objetoDao.update((T) objeto);
                gravaLog("alteração", (InterfaceEntidades) objeto, 0);
                desabitarFormulario();
                limparSqlsConsulta();
                atualizaTabela();
                renderizar();
                metodoDepoisDoSalvarAtualizar();
                verificaPaginaAnterior();
            }
        } catch (Exception e) {
            FacesUtils.addErrorMessage("Um erro ocorreu na atualização do registro. Informe ao administrados o sistema o seguinte erro: " + e.toString());
            e.printStackTrace();
        }
//        }
    }

    public void metodoDepoisDoSalvarAtualizar() {
    }
    
   

    public void salvar(ActionEvent event) {
//        if (((MetodosBotoes) FacesUtils.getManagedBean("botoes")).metodoValidarCampos(event)) {
        try {
            if (validacoes(event)) {

//                acrescentaCodigo(objeto);
//                acrescentaFilial(objeto);

                objetoDao.save((T) objeto);
                gravaLog("inclusão", (InterfaceEntidades) objeto, 0);
                // objetoLimpo();
                desabitarFormulario();
                limparSqlsConsulta();
                atualizaTabela();
                //  limpaLinhasTabela();
                renderizar();
                paginaAtual = 0;
                metodoDepoisDoSalvarAtualizar();
                verificaPaginaAnterior();
            }
//        }
        } catch (Exception e) {
            FacesUtils.addErrorMessage("Um erro ocorreu na gravação do registro. Informe ao administrados o sistema o seguinte erro: " + e.toString());
            e.printStackTrace();
        }
    }

    private void verificaPaginaAnterior() {
        ((NavegarPorPaginas) FacesUtils.getManagedBean("navegaEntrePaginas")).voltarPagina();
    }

    private void habilitarFormulario() {
        setFormularioDesabilitado(false);
        imediato = true;
        //  getInputText().requestFocus();
    }

    private void desabitarFormulario() {
        setFormularioDesabilitado(true);
        imediato = false;
        //  getInputText().requestFocus();
    }

    private void renderizar() {
     
        //  consPrecoGroup.requestRender();
        // SessionRenderer.render(grupo);
//        stockGroup.requestRender();
    }

    public void excluir(ActionEvent event) {
        Integer id = ((InterfaceEntidades) objeto).getId();
        Integer codigo = 0;
//        if (objeto instanceof InterfaceEntidadesCodigos) {
//            codigo = ((InterfaceEntidadesCodigos) objeto).getCodigo();
//        }
        try {
            objetoDao.delete((T) objeto);
            objetoLimpo();
            ((InterfaceEntidades) objeto).setId(id);
            gravaLog("exclusão", ((InterfaceEntidades) objeto), codigo);
            objetoLimpo();
            desabitarFormulario();
            limparSqlsConsulta();
            atualizaTabela();
            ((MetodosBotoes) FacesUtils.getManagedBean("botoes")).metodoLimparDoCancelar(event);
            //  limpaLinhasTabela();
            renderizar();
        } catch (Exception e) {
            FacesUtils.addInfoMessage("Não foi possível excluír. O registro não pode ser excluído por um erro interno ou por ser referênciado por um outro registro.");
            System.out.println("Erro ao excluir " + e.getMessage());
            e.printStackTrace();
        }
    }

    public List todos() {
        return objetoDao.getAll();
    }

    public List pesquisar(String sql) {
        return objetoDao.pesq(sql, "");
    }

    public T buscarPorChave(Object chave) {
        return (T) objetoDao.getByID((ID) chave);
    }

    public void objetoLimpo() {
        try {
            objeto = (T) objeto.getClass().newInstance();
        } catch (InstantiationException ex) {
            Logger.getLogger(BaseController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(BaseController.class.getName()).log(Level.SEVERE, null, ex);
        }
        //  return null;
    }

    public InterfaceEntidades objetoPreenchido(Object data) {
        return (InterfaceEntidades) data;
    }

//    public void getTodos(int maxPorPagina, int paginaAtual) {
//        totalDeRegistros = objetoDao.getTotalDeRegistrosFilial(Beans.getSessionBean().getFilialDoUsuarioConectado());
//        rowModel = new ListDataModel(objetoDao.todosRegistrosPaginados(maxPorPagina, paginaAtual, Beans.getSessionBean().getFilialDoUsuarioConectado()));
//    }
//
////    public Long getTotalDeRegistros() {
////        return objetoDao.getTotalDeRegistrosFilial(null);
////    }
//    public void getRegistrosConsultados(String parSql, String clausulaTotalDeRegistros) {
//        //     System.out.println(((ArrayList) objetoDao.todosRegistrosPag(parMaxPorPagina, parPaginaAtual, parSql, null)).toString());
//        rowModel = new ListDataModel(objetoDao.todosRegistrosPag(maxPorPagina, paginaAtual, parSql, Beans.getSessionBean().getFilialDoUsuarioConectado()));
//        totalDeRegistros = objetoDao.getTotalDeRegistros(clausulaTotalDeRegistros, Beans.getSessionBean().getFilialDoUsuarioConectado());
//        // permiteAtualizar = Boolean.TRUE;
//        // consulta = true;
//        //   System.out.println("chamei aqui");
//
//        //    return null;
//
//    }
    public void limparSqlsConsulta() {
        sqlConsulta = null;
        sqlClausulaTodosRegistros = null;
    }

    public void atualizaTabela() {
//        limpaLinhasTabela();
        if ((sqlConsulta != null) && (sqlClausulaTodosRegistros != null)
                && (!sqlConsulta.isEmpty()) && (!sqlClausulaTodosRegistros.isEmpty())) {
            rowModel = new ListDataModel(objetoDao.todosRegistrosPag(maxPorPagina, paginaAtual, sqlConsulta));
            totalDeRegistros = objetoDao.getTotalDeRegistros(sqlClausulaTodosRegistros);
        } else {
            totalDeRegistros = objetoDao.getTotalDeRegistros();
            rowModel = new ListDataModel(objetoDao.todosRegistrosPaginados(maxPorPagina, paginaAtual));
        }



    }
    private String sqlConsulta = null;
    private String sqlClausulaTodosRegistros = null;

    public String getSqlClausulaTodosRegistros() {
        return sqlClausulaTodosRegistros;
    }

    public void setSqlClausulaTodosRegistros(String clausulaTodosRegistros) {
        this.sqlClausulaTodosRegistros = clausulaTodosRegistros;
    }

    public String getSqlConsulta() {
        return sqlConsulta;
    }

    public void setSqlConsulta(String sqlConsulta) {
        this.sqlConsulta = sqlConsulta;
    }
//    private boolean consulta = false;
//
//    public boolean isConsulta() {
//        return consulta;
//    }
//
//    public void setConsulta(boolean consulta) {
//        this.consulta = consulta;
//    }
//    public Long getTotalDeRegistros(String sql) {
//        return objetoDao.getTotalDeRegistros(sql, Beans.getSessionBean().getFilialDoUsuarioConectado());
//    }
    private DataModel columnsModel = null;

    public DataModel getColumnsModel() {
        columnsModel = new ArrayDataModel(getListaDeColunas().toArray());
        //    permiteAtualizar = Boolean.FALSE;
        //  }
        return columnsModel;
    }
//    private String sqlConsulta;
//
//    public String getSqlConsulta() {
//        return sqlConsulta;
//    }
//
//    public void setSqlConsulta(String sqlConsulta) {
//        this.sqlConsulta = sqlConsulta;
//    }

//    public ArrayList<T> getTodosLista(int maxPorPagina, int paginaAtual) {
//        return new ArrayList<T>(objetoDao.todosRegistrosPaginados(maxPorPagina, paginaAtual, null));
//    }
    public DataModel getRowModel() {
        //System.out.println("Chamei o getRoModel aqui");
        //  Method[] metodos = objeto.getClass().getMethods();
//        System.out.println("getrowmodel");
//        if (permiteAtualizar) {
////            System.out.println("atualizando o rowmodel");
////            if ((sqlConsulta == null) || (sqlConsulta.isEmpty())) {
////            } else {
////
////            }
//        }
        // permiteAtualizar = Boolean.FALSE;

        //  Beans.getSessionBean().setAberturaPagina(true);
        if (rowModel == null) {
            limparSqlsConsulta();
            atualizaTabela();
        } else if (executeiPush) {
            atualizaTabela();
            executeiPush = false;
        }

        // atualizaTabela();
        return rowModel;
//        List lista1 = new ArrayList();
//        for (Object registro : getTodosLista(maxPorPagina, paginaAtual)) {
//            ArrayList lista = new ArrayList();
//            for (int i = 0; i < metodos.length; i++) {
//                if ((metodos[i].getName().contains("get"))
//                        && (!metodos[i].getName().substring(metodos[i].getName().length() - 2, metodos[i].getName().length() - 1).equals("9"))
//                        && (!(metodos[i].getName().equals("getClass")))
//                        && (!metodos[i].getName().contains("Collection"))) {
//                    Object objResult;
//                    try {
//                        Object[] obj = null;
//                        objResult = metodos[i].invoke(registro, obj);
//                        if (objResult == null) {
//                            lista.add("");
//                        } else {
//                            lista.add(objResult.toString());
//                        }
//                    } catch (IllegalAccessException ex) {
//                        Logger.getLogger(LogOperacoesController.class.getName()).log(Level.SEVERE, null, ex);
//                    } catch (IllegalArgumentException ex) {
//                        Logger.getLogger(LogOperacoesController.class.getName()).log(Level.SEVERE, null, ex);
//                    } catch (InvocationTargetException ex) {
//                        Logger.getLogger(LogOperacoesController.class.getName()).log(Level.SEVERE, null, ex);
//                    }
//                }
//            }
//            lista1.add(lista);
//        }
//
//        rowModel = new ListDataModel(lista1);
//        return rowModel;
    }
    private DataModel rowModel = null;

    public void setRowModel(DataModel rowModel) {
        this.rowModel = rowModel;
    }

    public void setColumnsModel(DataModel columnsModel) {
        this.columnsModel = columnsModel;
    }

//    public Object getDadosLinhas(int col, DataModel rowModel) {
//
//        if (col == 0) {
//            return ((Filial) rowModel.getRowData()).getNome();
//        }
//        if (col == 1) {
//            return ((Filial) rowModel.getRowData()).getNomeFantasia();
//        }
//         if (col == 2) {
//            return ((Filial) rowModel.getRowData()).getTelefone();
//        }
//
//        if (col == 3) {
//            return ((Filial) rowModel.getRowData()).getEmail();
//        }
//
//        if (col == 4) {
//            return ((Filial) rowModel.getRowData()).getCidade();
//        }
//        return null;
//    }
    public Object getDadosLinhas(int col, DataModel rowModel) {
        return null;
    }

    public Object getCellValue() {
        //    System.out.println("acessei aqui");
        if (rowModel != null && columnsModel != null) {
            if (rowModel.isRowAvailable() && columnsModel.isRowAvailable()) {
                // System.out.println("entrei" + columnsModel.getRowData());
                // int col = columnsModel.getRowIndex();
                // Object registro = rowModel.getRowData();
                return getDadosLinhas(columnsModel.getRowIndex(), rowModel);
//            ArrayList<String> lista = new ArrayList();
//            Method[] metodos = objeto.getClass().getMethods();
//            List<Method> listaDeMetodos = new ArrayList<Method>();
//            for (int i = 0; i < metodos.length; i++) {
//                if ((metodos[i].getName().contains("get"))
//                        && (!metodos[i].getName().substring(metodos[i].getName().length() - 1, metodos[i].getName().length()).equals("9"))
//                        && (!(metodos[i].getName().equals("getClass")))
//                        && (!metodos[i].getName().contains("Collection"))
//                        && (!metodos[i].getName().equals("getId"))) {
//                    listaDeMetodos.add(metodos[i]);
//
//                }
//            }
//            List<Method> listaDeColunaOrdenada = new ArrayList<Method>();
//            Field[] declaredFields = objeto.getClass().getDeclaredFields();
//            for (Field field : declaredFields) {
//                for (Method metodo : listaDeMetodos) {
//                    //  System.out.println("metodo  " + metodo.getName());
//                    if (field.getName().toLowerCase().trim().replace("9", "").equals(metodo.getName().replace("get", "").toLowerCase().trim())) {
//                        //System.out.println("metodo filtrado " + metodo.getName());
//                        listaDeColunaOrdenada.add(metodo);
//                        break;
//                    }
//                }
//            }
//            // System.out.println("-------------------------");
//            for (Method metodo : listaDeColunaOrdenada) {
//                Object objResult;
//                try {
//                    Object[] obj = null;
//                    objResult = metodo.invoke(registro, obj);
//                    if (objResult == null) {
//                        lista.add("");
//                    } else {
//                        lista.add(objResult.toString());
//                    }
//
//                } catch (IllegalAccessException ex) {
//                    Logger.getLogger(LogOperacoesController.class.getName()).log(Level.SEVERE, null, ex);
//                } catch (IllegalArgumentException ex) {
//                    Logger.getLogger(LogOperacoesController.class.getName()).log(Level.SEVERE, null, ex);
//                } catch (InvocationTargetException ex) {
//                    Logger.getLogger(LogOperacoesController.class.getName()).log(Level.SEVERE, null, ex);
//                }
//            }
                //   System.out.println("lista cellvalue" + lista.get(col).toString());
                //  return lista.get(col).toString();
                // System.out.println("lista cellvalue" + (rowModel.getRowData()).get(col).toString());
                //  return (rowModel.getRowData()).get(col).toString();
            } //   System.out.println("retornando null");
        }
        return null;
    }
    public int maxPorPagina = 9;
    public int paginaAtual = 0;
    public Long totalDeRegistros;

    public Long getTotalDeRegistros() {
        return totalDeRegistros;
    }

    public void setTotalDeRegistros(Long totalDeRegistros) {
        this.totalDeRegistros = totalDeRegistros;
    }

    public int getPaginaAtual() {
        return paginaAtual;
    }

    public void setPaginaAtual(int paginaAtual) {
        this.paginaAtual = paginaAtual;
    }

    public String primeiraPagina() {
        paginaAtual = 0;
        atualizaTabela();
        return null;
    }

    public String ultimaPagina() {
        Long rest = (getTotal() % maxPorPagina);
        if (rest != 0) {
            paginaAtual = (int) (getTotal() - rest);
        } else {
            paginaAtual = (int) (getTotal() - maxPorPagina);
        }
        atualizaTabela();
        return null;
    }

    public String proxima() {
        int soma = paginaAtual + maxPorPagina;
        if (soma < getTotal()) {
            paginaAtual += maxPorPagina;
        }
        atualizaTabela();
        return null;
    }

    public String anterior() {
        paginaAtual -= maxPorPagina;
        if (paginaAtual < 0) {
            paginaAtual = 0;
        }
        setPaginaAtual(paginaAtual);
        atualizaTabela();
        return null;
    }

    public Long getProximaPagina() {
        Long total = getTotal();
        int soma = getPaginaAtual() + maxPorPagina;
        Long proxima = (soma > total) ? total : soma;
        return proxima;
    }

    public Long getTotal() {
        return totalDeRegistros;
    }

//    public DataModel getTodosPaginacao() {
//        totalDeRegistros = getTotalDeRegistros();
//        return getTodos(maxPorPagina, getPaginaAtual());
//    }
    public Boolean validacoes(ActionEvent event) {
        return true;
    }
//    private HtmlDataTable tabela = new HtmlDataTable();
//
//    public HtmlDataTable getTabela() {
//        return tabela;
//    }
//
//    public void setTabela(HtmlDataTable tabela) {
//        this.tabela = tabela;
//    }
//    private Map<Integer, Boolean> dataTableOneRowSelected = new HashMap<Integer, Boolean>();
//
//    public Boolean getDataTableOneRowSelected() {
//        int currentRow = getTabela().getRowIndex();
//
//        Boolean returnValue = Boolean.FALSE;
//        if (dataTableOneRowSelected.containsKey(currentRow)) {
//
//            returnValue = dataTableOneRowSelected.get(currentRow);
//        }
//        return returnValue;
//    }
//
//    public void limpaLinhasTabela() {
//        dataTableOneRowSelected.clear();
//        dataTable1.setRowIndex(-1);
//        //  primeiraPagina();
//
//    }
//
//    public void setDataTableOneRowSelected(Boolean selected) {
//        int currentRow = getTabela().getRowIndex();
//        Boolean returnValue = Boolean.FALSE;
//        if (dataTableOneRowSelected.containsKey(currentRow)) {
//            returnValue = dataTableOneRowSelected.get(currentRow);
//            if ((selected) && (returnValue)) {
//                dataTableOneRowSelected.put(currentRow, false);
//            } else {
//                dataTableOneRowSelected.put(currentRow, selected);
//            }
//        } else {
//            dataTableOneRowSelected.put(currentRow, selected);
//        }
//    }

    public void listenerSelecaoTabela(RowSelectorEvent rse) {
//        //  System.out.println("executei aqui");
//        int selectedRowIndex = rse.getRow();
//        getTabela().setRowIndex(selectedRowIndex);
//        //   System.out.println("objeto: " + getTabela().getRowData());
//        setObjeto((T) getTabela().getRowData());
//        // imediato = false;
        //  flagPanelFormulario = true;
        //   flagPanelConsulta = false;
    }

    public void botaoAlterarTabela(ActionEvent event) {
//        getTabela().setRowIndex(click.getRow());
        //   System.out.println("objeto: " + getTabela().getRowData());
        setObjeto((T) getRowModel().getRowData());
//        if (click.isDblClick()) {
        //  System.out.println("executei aqui");            
        visualizar(event);

        // imediato = false;
        //  flagPanelFormulario = true;
        //   flagPanelConsulta = false;
//        } 
    }

    public void alterar(ActionEvent click) {

        //  System.out.println("executei aqui");            
        editar(click);
        // imediato = false;
        //  flagPanelFormulario = true;
        //   flagPanelConsulta = false;

    }
    private Boolean flagPanelConsulta = false;
    private Boolean flagPanelFormulario = true;

    public Boolean getFlagPanelConsulta() {
        return flagPanelConsulta;
    }

    public void setFlagPanelConsulta(Boolean flagPanelConsulta) {
        //  if (flagPanelConsulta) {
        //  permiteAtualizar = Boolean.TRUE;
//            flagPanelFormulario = false;
//        } else {
//            flagPanelFormulario = true;
        // }
        this.flagPanelConsulta = flagPanelConsulta;
        //    System.out.println("setei aqui" + flagPanelConsulta);

    }

    public Boolean getFlagPanelFormulario() {
        return flagPanelFormulario;
    }

    public void setFlagPanelFormulario(Boolean flagPanelFormulario) {
        //      System.out.println("setei aqui1" + flagPanelFormulario);
//        if (flagPanelFormulario) {
//            flagPanelConsulta = false;
//        } else {
//            flagPanelConsulta = true;
//        }
        this.flagPanelFormulario = flagPanelFormulario;
        //  System.out.println("setei aqui1" + flagPanelFormulario);
    }

    public void trocaPainel(ActionEvent event) {

        if (getFlagPanelFormulario()) {
            setFlagPanelConsulta(true);
            setFlagPanelFormulario(false);
        } else {
            setFlagPanelConsulta(false);
            setFlagPanelFormulario(true);
            visualizandoORegistro();
        }
        if (!formularioDesabilitado) {
            cancelar(null);
        }
    }

    public void trocaPainel1(ActionEvent event) {
        if (getFlagPanelConsulta()) {
            setFlagPanelConsulta(false);
            setFlagPanelFormulario(true);
            visualizandoORegistro();
        } else {
            setFlagPanelConsulta(true);
            setFlagPanelFormulario(false);
        }

        if (!formularioDesabilitado) {
            cancelar(null);
        }

    }

//    public void FormularioPanel(ActionEvent event) {
//        setFlagPanelConsulta(Boolean.FALSE);
//        setFlagPanelFormulario(Boolean.TRUE);
//        inputText.requestFocus();
//
//    }
//
//    public void ConsultaPanel(ActionEvent event) {
//        setFlagPanelConsulta(Boolean.TRUE);
//        setFlagPanelFormulario(Boolean.FALSE);
//    }
    public void editar(ActionEvent event) {
        if ((getObjeto() != null) && ((InterfaceEntidades) getObjeto()).getId() != null) {
//            setFlagPanelConsulta(Boolean.FALSE);
//            setFlagPanelFormulario(Boolean.TRUE);
//            visualizandoORegistro();
            habilitarFormulario();
            inputText.requestFocus();
        }
        //    getInputText().requestFocus();
    }

    public void visualizar(ActionEvent event) {
        setFlagPanelConsulta(Boolean.FALSE);
        setFlagPanelFormulario(Boolean.TRUE);
        visualizandoORegistro();

        //    getInputText().requestFocus();
    }
    private HtmlInputText inputText = new HtmlInputText();
    private HtmlDataTable dataTable1 = new HtmlDataTable();

    public HtmlDataTable getDataTable1() {
        return dataTable1;
    }

    public void setDataTable1(HtmlDataTable dataTable1) {
        this.dataTable1 = dataTable1;
    }

    public HtmlInputText getInputText() {
        return inputText;
    }

    public void setInputText(HtmlInputText inputText) {
        this.inputText = inputText;
    }
    private boolean formularioDesabilitado = true;

    public boolean isFormularioDesabilitado() {
        return formularioDesabilitado;
    }

    public void setFormularioDesabilitado(boolean formularioDesabilitado) {
        this.formularioDesabilitado = formularioDesabilitado;
    }

    public void inserir(ActionEvent event) {
        objetoLimpo();
        habilitarFormulario();
        getInputText().requestFocus();
        visualizandoORegistro();
        //((ClasseEfeitos) FacesUtils.getManagedBean("beanEfeitos")).invocarEfeitoUp();
    }

    public void cancelar(ActionEvent event) {
        desabitarFormulario();
        if (((InterfaceEntidades) getObjeto()).getId() != null) {
            setObjeto(objetoDao.getByID((ID) ((InterfaceEntidades) getObjeto()).getId()));
        } else {
            objetoLimpo();
        }
        // permiteAtualizar = Boolean.TRUE;        
        atualizaTabela();
        limparSqlsConsulta();
        ((MetodosBotoes) FacesUtils.getManagedBean("botoes")).metodoLimparDoCancelar(event);
        //((ClasseEfeitos) FacesUtils.getManagedBean("beanEfeitos")).invocarEfeitoDown();
        verificaPaginaAnterior();
        //      inputText.setSubmittedValue(null);
        //inputText.se
    }
//    private Boolean permiteAtualizar = true;
//
//    public Boolean getPermiteAtualizar() {
//        return permiteAtualizar;
//
//
//    }
//
//    public void setPermiteAtualizar(Boolean permiteAtualizar) {
//        this.permiteAtualizar = permiteAtualizar;
//
//
//    }

    public void salvarRegistro(ActionEvent event) {
        if (((InterfaceEntidades) objeto).getId() != null) {
            atualizar(event);
        } else {
            salvar(event);
        }
    }

    public void recarregarTabela(ActionEvent event) {
        paginaAtual = 0;
        limparSqlsConsulta();
        atualizaTabela();
    }

    public List<SelectItem> getColunas() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (int i = 0; i < getListaDeColunas().size(); i++) {
            items.add(new SelectItem(getListaDeColunas().get(i)));
        }
        return items;
    }

    public List<SelectItem> getOperadores() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        items.add(new SelectItem("contendo"));
        items.add(new SelectItem("igual a"));
        items.add(new SelectItem("diferente de"));
        items.add(new SelectItem("iniciando com"));
        items.add(new SelectItem("terminando com"));
        items.add(new SelectItem("maior que"));
        items.add(new SelectItem("menor que"));
        items.add(new SelectItem("maior ou igual"));
        items.add(new SelectItem("menor ou igual"));
        items.add(new SelectItem("data igual a"));
        items.add(new SelectItem("data menor que"));
        items.add(new SelectItem("data maior que"));
        items.add(new SelectItem("data maior ou igual"));
        items.add(new SelectItem("data menor ou igual"));
        items.add(new SelectItem("hora igual a"));
        items.add(new SelectItem("hora maior que"));
        items.add(new SelectItem("hora menor que"));
        items.add(new SelectItem("hora maior ou igual"));
        items.add(new SelectItem("hora menor ou igual"));
        return items;
    }

    public List<SelectItem> getConcatenadores() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        items.add(new SelectItem("e"));
        items.add(new SelectItem("ou"));
        return items;
    }

    public void dispose() throws Exception {
        // SessionRenderer.removeCurrentSession(grupo);
        // consPrecoGroup.remove(this);
//        if ((this != null) && (stockGroup != null)) {
//            stockGroup.remove(this);
//        }
    }
    // private String grupo = "grupo";
//    private PersistentFacesState state = null;
//
//    public PersistentFacesState getState() {
//        System.out.println("executei o state ;;;;");
//        return state;
//       // throw new UnsupportedOperationException("Not supported yet.");
//    }
//
//    public void renderingException(RenderingException re) {
//        throw new UnsupportedOperationException("Not supported yet.");
//    }
//    public PersistentFacesState getState() {
//        System.out.println("passei por aqui");
//        atualizaTabela();
//        return state;
//    }
//    public void renderingException(RenderingException re) {
//        SessionRenderer.removeCurrentSession(grupo);
//          consPrecoGroup.remove(this);
//    }
//     public RenderManager getRenderManager() {
//        //      System.out.println("renderManager pageCadastroPagina");
//        return renderManager;
//    }
//
//
//    private OnDemandRenderer consPrecoGroup = null;
//
//    public void setRenderManager(RenderManager renderManager) {
//        if (renderManager != null) {
//            this.renderManager = renderManager;
//            consPrecoGroup  = renderManager.getOnDemandRenderer("consPrecoGroup");
//           // empresaGroup  = getSessionBean1().configurarPushGeralNasPaginas(renderManager);
//         //   empresaGroup.add(this);
//            consPrecoGroup.add(this);
//        }
//    }
//
//    private RenderManager renderManager;
//    private PersistentFacesState state;
//    private RenderManager renderManager;
//    private OnDemandRenderer stockGroup;
    private boolean executeiPush = false;

//    public RenderManager getRenderManager() {
//        return renderManager;
//    }
    public boolean isExecuteiPush() {
        return executeiPush;
    }

    public void setExecuteiPush(boolean executeiPush) {
        this.executeiPush = executeiPush;
    }

//    public PersistentFacesState getState() {
//        //  System.out.println("executei aqui no state");
//        executeiPush = true;
//        return state;
//    }
//
//    public void renderingException(RenderingException renderingException) {
//        stockGroup.remove(this);
//    }
//
//    public void setRenderManager(RenderManager renderManager) {
//        this.renderManager = renderManager;
//        stockGroup = renderManager.getOnDemandRenderer(objeto.getClass().getSimpleName() + "Group");
//        stockGroup.add(this);
//    }
    public void abrirPagina() {
        paginaAtual = 0;
        objetoLimpo();
        desabitarFormulario();
        setFlagPanelConsulta(Boolean.FALSE);
        setFlagPanelFormulario(Boolean.TRUE);
        limparSqlsConsulta();
        atualizaTabela();
        ConsultaSimplesBean consultaSimplesBean = (ConsultaSimplesBean) FacesUtils.getManagedBean("consultaSimples");
        consultaSimplesBean.setItTexto("");
        consultaSimplesBean.setSomOperador(getOperadores().get(0) + "");
        consultaSimplesBean.setSomCampo(getColunas().get(0) + "");
        visualizandoORegistro();
    }
    private boolean imediato = false;

    public boolean isImediato() {
        return imediato;
    }

    public void setImediato(boolean imediato) {
        this.imediato = imediato;
    }

    public T buscaPorCampo(String campo, String texto) {
        return (T) objetoDao.getPorCampo(campo, texto);
    }

//    public static Object acrescentaCodigo(Object objeto) {
//        if (objeto instanceof InterfaceEntidadesCodigos) {
//            CodigosClassesController controller = (CodigosClassesController) FacesUtils.getManagedBean("CodigosClassesController");
//            CodigosClasses codigotabela;
//            try {
//                codigotabela = controller.buscaCodigoUsuario(objeto.getClass().getSimpleName(), Beans.getSessionBean().getFilialDoUsuarioConectado().getId() + "");
//            } catch (NoResultException no) {
//                codigotabela = null;
//                System.out.println("Exception: " + no.getStackTrace());
//            }
//            if (codigotabela != null) {
//                Integer codigo = codigotabela.getCodigo();
//                ((InterfaceEntidadesCodigos) objeto).setCodigo(codigo++);
//                codigotabela.setCodigo(codigo++);
//                controller.getObjetoDao().update(codigotabela);
//            } else if (Beans.getSessionBean().getFilialDoUsuarioConectado() != null) {
//                CodigosClasses codigosClassesNovo = new CodigosClasses();
//                codigosClassesNovo.setCodigo(2);
//                codigosClassesNovo.setClasse(objeto.getClass().getSimpleName().toLowerCase());
//                codigosClassesNovo.setFilialId(Beans.getSessionBean().getFilialDoUsuarioConectado());
//                controller.getObjetoDao().save(codigosClassesNovo);
//
//                ((InterfaceEntidadesCodigos) objeto).setCodigo(1);
//            }
//        }
//        return objeto;
//    }
//
//    public static Object acrescentaFilial(Object objeto) {
//        if (objeto instanceof InterfaceEntidadesCodigosEFiliais) {
//            SessionBean1 session = Beans.getSessionBean();
//            if (session.getFilialDoUsuarioConectado() != null) {
//                ((InterfaceEntidadesCodigosEFiliais) objeto).setFilialId(session.getFilialDoUsuarioConectado());
//            } else {
//                new Exception("Não existe filial cadastrada na sessão para o usuário (Classe AdicionaFilialAoOjeto)");
//            }
//        }
//        return objeto;
//    }
    public void visualizandoORegistro() {
        //  System.out.println("Estou Visualizando o Registro");
    }

    public Boolean encontrouRegistro(String sql) {
        return objetoDao.encontrouRegistro(sql);
    }

    public T getResultadoSimples(String sql) {
        return objetoDao.getResultadoSimples(sql);
    }

    public void gravaLog(String operacao, InterfaceEntidades interfaceEntidades, Integer codigo) {
//        try {
//            new GravaLogOperacoes().gravaLog(operacao, interfaceEntidades, codigo);
//        } catch (IOException ex) {
//            Logger.getLogger(InterfaceController.class.getName()).log(Level.SEVERE, null, ex);
//        }
    }
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    private String somCampo = new String();

    public String getSomCampo() {
        return somCampo;
    }

    public void setSomCampo(String somCampo) {
        this.somCampo = somCampo;
    }
    private String somOperador = new String();

    public String getSomOperador() {
        return somOperador;
    }

    public void setSomOperador(String somOperador) {
        this.somOperador = somOperador;
    }
    private String itTexto = "";

    public String getItTexto() {
        return itTexto;
    }

    public void setItTexto(String itTexto) {
        this.itTexto = itTexto;
    }
    private Converter conversor;

    public Converter getConversor() {
        return conversor;
    }

    public void setConversor(Converter conversor) {
        this.conversor = conversor;
    }

    public void consultar(ActionEvent event) {
        if ((itTexto == null) || (itTexto.trim().equals(""))) {
//            FacesUtils.addInfoMessage("Erro de Validação. Valor é Obrigatório.");
            return;
        }

//        UIInput input = (UIInput) event.getComponent().findComponent("itTexto");
//        if ((input.getValue() == null) || (input.getValue().toString().trim().equals(""))) {
//            FacesUtils.addInfoMessage(input.getClientId(), "Erro de Validação. Valor é Obrigatório.");
//            return;
//        }
        String textoConvertido = itTexto.toString().replace("'", "''");
        Criterio criterio = new Criterio(getSomCampo(), getSomOperador(), textoConvertido);
        String sql = "";
        String nomeClasse;
        String nomeDaPagina = FacesContext.getCurrentInstance().getViewRoot().getViewId().toString();
//        BaseController controler = ((MetodosBotoes) FacesUtils.getManagedBean("botoes")).getControllerPagina();
        if (nomeDaPagina.toUpperCase().equals("LOG DE OPERAÇÕES")) {
            nomeClasse = "LogOperacoes";
        } else {
            nomeClasse = getObjeto().getClass().getSimpleName();
        }
        String tabelas = "";

        String campo = (String) getRelacoes().get(criterio.getColuna());
        if (campo.indexOf("/") != -1) {
            tabelas = campo.substring(0, campo.indexOf("/"));
            campo = campo.substring(campo.indexOf("/") + 1, campo.length());
        }
        sql = "SELECT DISTINCT c FROM " + nomeClasse + " c " + tabelas + " WHERE (";
        campo = campo.substring(0, 1).toLowerCase().concat(campo.substring(1));
        sql += ("upper(c." + campo + ")");  //+ campo + ")");

        if (criterio.getOperador().toLowerCase().trim().equals("igual a")) {
            sql = sql + " = upper('" + criterio.getTexto() + "')";
        } else if (criterio.getOperador().toLowerCase().trim().equals("maior que")) {
            sql = sql + " > " + criterio.getTexto();
        } else if (criterio.getOperador().toLowerCase().trim().equals("menor que")) {
            sql = sql + " < " + criterio.getTexto();
        } else if (criterio.getOperador().toLowerCase().trim().equals("maior ou igual")) {
            sql = sql + " >= " + criterio.getTexto();
        } else if (criterio.getOperador().toLowerCase().trim().equals("menor ou igual")) {
            sql = sql + " <= " + criterio.getTexto();
        } else if ((criterio.getOperador().toLowerCase().trim().equals("data igual a"))
                || (criterio.getOperador().toLowerCase().trim().equals("hora igual a"))) {
            sql = sql + " = '" + criterio.getTexto() + "'";
        } else if ((criterio.getOperador().toLowerCase().trim().equals("data menor que"))
                || (criterio.getOperador().toLowerCase().trim().equals("hora menor que"))) {
            sql = sql + " < '" + criterio.getTexto() + "'";
        } else if ((criterio.getOperador().toLowerCase().trim().equals("data maior que"))
                || (criterio.getOperador().toLowerCase().trim().equals("hora maior que"))) {
            sql = sql + " > '" + criterio.getTexto() + "'";
        } else if ((criterio.getOperador().toLowerCase().trim().equals("data menor ou igual"))
                || (criterio.getOperador().toLowerCase().trim().equals("hora menor ou igual"))) {
            sql = sql + " <= '" + criterio.getTexto() + "'";
        } else if ((criterio.getOperador().toLowerCase().trim().equals("data maior ou igual"))
                || (criterio.getOperador().toLowerCase().trim().equals("hora maior ou igual"))) {
            sql = sql + " >= '" + criterio.getTexto() + "'";
        } else if (criterio.getOperador().toLowerCase().trim().equals("contendo")) {
            sql = sql + " LIKE '%" + criterio.getTexto().toUpperCase() + "%'";
        } else if (criterio.getOperador().toLowerCase().trim().equals("iniciando com")) {
            sql = sql + " LIKE '" + criterio.getTexto().toUpperCase() + "%'";
        } else if (criterio.getOperador().toLowerCase().trim().equals("terminando com")) {
            sql = sql + " LIKE '%" + criterio.getTexto().toUpperCase() + "'";
        } else if (criterio.getOperador().toLowerCase().trim().equals("diferente de")) {
            sql = sql + " <> '" + criterio.getTexto().toUpperCase() + "'";
        } else {
            FacesUtils.addInfoMessage("Erro no operador da consulta! Informe ao administrador do sistema.");
            return;
        }
        sql = sql + ")"; //+ " ORDER BY c.id DESC";
        limparSqlsConsulta();
        setSqlConsulta(sql);
        setSqlClausulaTodosRegistros(tabelas + " " + sql.substring(sql.indexOf("WHERE", 14) - 1, sql.lastIndexOf(")") + 1));
        setPaginaAtual(0);
        atualizaTabela();
    }

    public void processarOperador(ValueChangeEvent vce) {

        if (vce.getNewValue() != null) {
            setSomOperador(vce.getNewValue().toString());
            if ((getSomOperador().equals("igual a")) || (getSomOperador().equals("contendo"))
                    || (getSomOperador().equals("diferente de")) || (getSomOperador().equals("iniciando com")) || (getSomOperador().equals("terminando com"))) {
                setConversor(null);
            } else if ((getSomOperador().equals("maior que")) || (getSomOperador().equals("menor que")) || (getSomOperador().equals("maior ou igual")) || (getSomOperador().equals("menor ou igual"))) {
                setConversor(new NumberConverter());
            } else if ((getSomOperador().equals("data maior que")) || (getSomOperador().equals("data igual a")) || (getSomOperador().equals("data menor que")) || (getSomOperador().equals("data maior ou igual")) || (getSomOperador().equals("data menor ou igual"))) {
                DateTimeConverter sqlTime = new DateTimeConverter();
                sqlTime.setPattern("yyyy-MM-dd");
                setConversor(sqlTime);
            } else if ((getSomOperador().equals("hora maior que")) || (getSomOperador().equals("hora igual a")) || (getSomOperador().equals("hora menor que")) || (getSomOperador().equals("hora menor ou igual")) || (getSomOperador().equals("hora maior ou igual"))) {
                DateTimeConverter sqlTime = new DateTimeConverter();
                sqlTime.setPattern("HH:mm");
                setConversor(sqlTime);
            }
        }

    }
    private boolean renderizaConfirmaExclusao = false;

    public boolean isRenderizaConfirmaExclusao() {
        return renderizaConfirmaExclusao;
    }

    public void setRenderizaConfirmaExclusao(boolean renderizaConfirmaExclusao) {
        this.renderizaConfirmaExclusao = renderizaConfirmaExclusao;
    }

    public void cancelarExclusao(ActionEvent event) {
        System.out.println("cancelar exclusão");
        renderizaConfirmaExclusao = false;
    }

    public void abrirConfirmacaoDeExclusao(ActionEvent event) {
        System.out.println("abrirConfirmacaoDeExclusao");
//        BaseController controler = ((MetodosBotoes) FacesUtils.getManagedBean("botoes")).getControllerPagina();
        if ((getObjeto() != null) && (((InterfaceEntidades) getObjeto()).getId() != null)) {
            System.out.println("renderizaConfirmaExclusao");
            renderizaConfirmaExclusao = true;
        }
    }

    public void confirmarExclusao(ActionEvent event) {
        renderizaConfirmaExclusao = false;
//        BaseController controler = ((MetodosBotoes) FacesUtils.getManagedBean("botoes")).getControllerPagina();
        excluir(event);
    }

//    private void limparCampos(HtmlPanelGrid compp, UIComponent comp) {
//        ArrayList listaComp = (ArrayList) compp.getChildren();
//        forLimpaCampos(listaComp, comp);
//    }
//
//    private void limparCampos(HtmlPanelGroup compp, UIComponent comp) {
//        ArrayList listaComp = (ArrayList) compp.getChildren();
//        forLimpaCampos(listaComp, comp);
//    }
//
//    private void limparFormulario(UIComponent compnovo) {
//        ArrayList lista = (ArrayList) compnovo.getChildren();
//        for (int i = 0; i < lista.size(); i++) {
//            UIComponent comp = (UIComponent) lista.get(i);
//            if ((comp.getClass() == HtmlPanelGroup.class) || (comp.getClass() == HtmlPanelGrid.class)) {
//                if (comp.getClass() == HtmlPanelGroup.class) {
//                    HtmlPanelGroup compp = (HtmlPanelGroup) comp;
//                    limparCampos(compp, comp);
//                } else if (comp.getClass() == HtmlPanelGrid.class) {
//                    HtmlPanelGrid compp = (HtmlPanelGrid) comp;
//                    limparCampos(compp, comp);
//                }
//            }
//        }
//    }
//
//    private void forLimpaCampos(ArrayList listaComp, UIComponent comp) {
//        for (int j = 0; j < listaComp.size(); j++) {
//            UIComponent component = (UIComponent) listaComp.get(j);
//            if (component instanceof UIInput) {
//                UIInput input = (UIInput) comp.getChildren().get(j);
//                input.setSubmittedValue(null);
//                //  input.resetValue();
//            } else if (component instanceof HtmlSelectOneMenu) {
//                HtmlSelectOneMenu input = (HtmlSelectOneMenu) comp.getChildren().get(j);
//                input.setSubmittedValue(null);
//                // System.out.println("Select  HtmlSelectOneMenu");
//            } else if (component instanceof javax.faces.component.html.HtmlSelectOneMenu) {
//                HtmlSelectOneMenu input = (HtmlSelectOneMenu) comp.getChildren().get(j);
//                input.setSubmittedValue(null);
//                //    System.out.println("Select  HtmlSelectOneMenu2");
//            } else if (component instanceof UISelectBoolean) {
//                UISelectBoolean input = (UISelectBoolean) comp.getChildren().get(j);
//                input.setSubmittedValue(null);
//                //   System.out.println("selectBoolean");
//            } else if (component instanceof UISelectMany) {
//                UISelectMany input = (UISelectMany) comp.getChildren().get(j);
//                input.setSubmittedValue(null);
//                //  System.out.println("SelectMany");
//            } else if (component instanceof UISelectOne) {
//                UISelectOne input = (UISelectOne) comp.getChildren().get(j);
//                input.setSubmittedValue(null);
//            } else if (component instanceof HtmlPanelGrid) {
//                HtmlPanelGrid compp = (HtmlPanelGrid) component;
//                limparCampos(compp, component);
//            } else if (component instanceof HtmlPanelGroup) {
//                HtmlPanelGroup compp = (HtmlPanelGroup) component;
//                limparCampos(compp, component);
//            }
//        }
//    }
//
//    public void metodoLimparDoCancelar(ActionEvent event) {
//        if (event.getComponent().findComponent("pTabSetGeral") != null) {
//            // System.out.println("entrei aqui");
//            if (event.getComponent().findComponent("pTabSetGeral:panelCampos") != null) {
//                //       System.out.println("entrei aqui1");
//                limparFormulario(event.getComponent().findComponent("pTabSetGeral:panelCampos"));
//            }
//            if (event.getComponent().findComponent("pTabSetGeral:panelCampos1") != null) {
//                limparFormulario(event.getComponent().findComponent("pTabSetGeral:panelCampos1"));
//            }
//            if (event.getComponent().findComponent("pTabSetGeral:panelCampos2") != null) {
//                limparFormulario(event.getComponent().findComponent("pTabSetGeral:panelCampos2"));
//            }
//            if (event.getComponent().findComponent("pTabSetGeral:panelCampos3") != null) {
//                limparFormulario(event.getComponent().findComponent("pTabSetGeral:panelCampos3"));
//            }
//            if (event.getComponent().findComponent("pTabSetGeral:panelCampos4") != null) {
//                limparFormulario(event.getComponent().findComponent("pTabSetGeral:panelCampos4"));
//            }
//            if (event.getComponent().findComponent("pTabSetGeral:panelCampos5") != null) {
//                limparFormulario(event.getComponent().findComponent("pTabSetGeral:panelCampos5"));
//            }
//            ((PanelTabSet) event.getComponent().findComponent("pTabSetGeral")).setSelectedIndex(0);
//
//        }
//        if (event.getComponent().findComponent("panelCampos") != null) {
//            //  System.out.println("entrei aqui2");
//            limparFormulario(event.getComponent().findComponent("panelCampos"));
//        }
//    }
//
//    public boolean metodoValidarCampos(ActionEvent event) {
//        retorno = true;
//        if (event.getComponent().findComponent("pTabSetGeral") != null) {
//            // System.out.println("entrei aqui");
//            if (event.getComponent().findComponent("pTabSetGeral:panelCampos") != null) {
//                //       System.out.println("entrei aqui1");
//                validarFormulario(event.getComponent().findComponent("pTabSetGeral:panelCampos"));
//            }
//            if (event.getComponent().findComponent("pTabSetGeral:panelCampos1") != null) {
//                validarFormulario(event.getComponent().findComponent("pTabSetGeral:panelCampos1"));
//            }
//            if (event.getComponent().findComponent("pTabSetGeral:panelCampos2") != null) {
//                validarFormulario(event.getComponent().findComponent("pTabSetGeral:panelCampos2"));
//            }
//            if (event.getComponent().findComponent("pTabSetGeral:panelCampos3") != null) {
//                validarFormulario(event.getComponent().findComponent("pTabSetGeral:panelCampos3"));
//            }
//            if (event.getComponent().findComponent("pTabSetGeral:panelCampos4") != null) {
//                validarFormulario(event.getComponent().findComponent("pTabSetGeral:panelCampos4"));
//            }
//            if (event.getComponent().findComponent("pTabSetGeral:panelCampos5") != null) {
//                validarFormulario(event.getComponent().findComponent("pTabSetGeral:panelCampos5"));
//            }
//            ((PanelTabSet) event.getComponent().findComponent("pTabSetGeral")).setSelectedIndex(0);
//
//        }
//        if (event.getComponent().findComponent("panelCampos") != null) {
//            //  System.out.println("entrei aqui2");
//            validarFormulario(event.getComponent().findComponent("panelCampos"));
//        }
//        return retorno;
//    }
//    private boolean retorno = true;
//
//    private void validarCampos(HtmlPanelGrid compp, UIComponent comp) {
//        ArrayList listaComp = (ArrayList) compp.getChildren();
//        forValidarCampos(listaComp, comp);
//    }
//
//    private void validarCampos(HtmlPanelGroup compp, UIComponent comp) {
//        ArrayList listaComp = (ArrayList) compp.getChildren();
//        forValidarCampos(listaComp, comp);
//    }
//
//    private void validarFormulario(UIComponent compnovo) {
//        ArrayList lista = (ArrayList) compnovo.getChildren();
//        for (int i = 0; i < lista.size(); i++) {
//            UIComponent comp = (UIComponent) lista.get(i);
//            if ((comp.getClass() == HtmlPanelGroup.class) || (comp.getClass() == HtmlPanelGrid.class)) {
//                if (comp.getClass() == HtmlPanelGroup.class) {
//                    HtmlPanelGroup compp = (HtmlPanelGroup) comp;
//                    validarCampos(compp, comp);
//                } else if (comp.getClass() == HtmlPanelGrid.class) {
//                    HtmlPanelGrid compp = (HtmlPanelGrid) comp;
//                    validarCampos(compp, comp);
//                }
//            }
//        }
//
//    }
//
//    private void forValidarCampos(ArrayList listaComp, UIComponent comp) {
//        for (int j = 0; j < listaComp.size(); j++) {
//            UIComponent component = (UIComponent) listaComp.get(j);
//            if (component instanceof UIInput) {
//                UIInput input = (UIInput) comp.getChildren().get(j);
//                if ((input.getId().toUpperCase().charAt(0) == 'N') && (input.getId().toUpperCase().charAt(1) == 'N')) {
//                    if ((input.getValue() == null) || (input.getValue().toString().trim().equals(""))) {
//                        if (input instanceof HtmlInputText) {
//                            ((HtmlInputText) input).requestFocus();
//                        } else if (input instanceof HtmlSelectOneMenu) {
//                            ((HtmlSelectOneMenu) input).requestFocus();
//                        } else if (input instanceof HtmlInputSecret) {
//                            ((HtmlInputSecret) input).requestFocus();
//                        } else if (input instanceof HtmlInputTextarea) {
//                            ((HtmlInputTextarea) input).requestFocus();
//                        }
//                        FacesUtils.addInfoMessage(input.getClientId(), "Erro de Validação. Valor é Obrigatório.");
//                        retorno = false;
//                    }
//                }
//                //  input.resetValue();
//            } else if (component instanceof HtmlPanelGrid) {
//                HtmlPanelGrid compp = (HtmlPanelGrid) component;
//                validarCampos(compp, component);
//            } else if (component instanceof HtmlPanelGroup) {
//                HtmlPanelGroup compp = (HtmlPanelGroup) component;
//                validarCampos(compp, component);
//            }
//        }
//    }
    public void setCollection(Collection c) {
    }

    public Collection getCollection() {
        return null;
    }

    public void setCollection1(Collection c1) {
    }

    public Collection getCollection1() {
        return null;
    }
    public DataModel dataModelTabela = null;

    public DataModel getDataModelTabela() {
        return dataModelTabela = new ListDataModel((List) getCollection());
    }

    public void setDataModelTabela(DataModel dataModelTabela) {
        this.dataModelTabela = dataModelTabela;
    }
    InterfaceEntidades itemSelecionado;

    public InterfaceEntidades getItemSelecionado() {
        return itemSelecionado;
    }

    public void setItemSelecionado(InterfaceEntidades itemSelecionado) {
        this.itemSelecionado = itemSelecionado;
    }

    public void adicionarItem(ActionEvent event) {
        //   Collection collec = getCollection();
        if (getCollection() == null) {
            setCollection(new ArrayList());
        }
        if (itemSelecionado != null) {
            if (getCollection().contains(itemSelecionado)) {
                if (event.getComponent() != null) {
                    FacesUtils.addInfoMessage(event.getComponent().getClientId(), "Registro Duplicado.");
                }
                return;
            } else {
                getCollection().add(itemSelecionado);

            }
            //    setCollection(collec);
        }
    }

    public void excluirItem(ActionEvent event) {
        if ((getCollection() != null)) {
            //Collection c = getCollection();
            InterfaceEntidades interfaceEntidades = (InterfaceEntidades) dataModelTabela.getRowData();
            if (getCollection().contains(interfaceEntidades)) {
                getCollection().remove(interfaceEntidades);
            }
            //setCollection(c);
        }
    }
    public DataModel dataModelTabela1 = null;

    public DataModel getDataModelTabela1() {
        return dataModelTabela1 = new ListDataModel((List) getCollection1());
    }

    public void setDataModelTabela1(DataModel dataModelTabela1) {
        this.dataModelTabela1 = dataModelTabela1;
    }
    InterfaceEntidades itemSelecionado1;

    public InterfaceEntidades getItemSelecionado1() {
        return itemSelecionado1;
    }

    public void setItemSelecionado1(InterfaceEntidades itemSelecionado1) {
        this.itemSelecionado1 = itemSelecionado1;
    }

    public void adicionarItem1(ActionEvent event) {
        //   Collection collec = getCollection();
        if (getCollection1() == null) {
            setCollection1(new ArrayList());
        }
        if (itemSelecionado1 != null) {
            if (getCollection1().contains(itemSelecionado1)) {
                if (event.getComponent() != null) {
                    FacesUtils.addInfoMessage(event.getComponent().getClientId(), "Registro Duplicado.");
                }
                return;
            } else {
                getCollection1().add(itemSelecionado1);

            }
            //    setCollection(collec);
        }
    }

    public void excluirItem1(ActionEvent event) {
        if ((getCollection1() != null)) {

            InterfaceEntidades interfaceEntidades = (InterfaceEntidades) dataModelTabela1.getRowData();
            if (getCollection1().contains(interfaceEntidades)) {
                getCollection1().remove(interfaceEntidades);
            }
        }
    }

    public String consultaDefinida(String sql) {
        return null;
    }

    public void consultaEspecifica(ActionEvent event) {
        String sql = null;
        String tabelas = "";
        sql = consultaDefinida(sql);
        if ((sql != null)) {
            limparSqlsConsulta();
            setSqlConsulta(sql);
            setSqlClausulaTodosRegistros(tabelas + " " + sql.substring(sql.indexOf("WHERE", 14) - 1, sql.lastIndexOf(")") + 1));
            setPaginaAtual(0);
            atualizaTabela();
        }
    }
    
    
}
